package cn.succy.spider.util;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
 * 图片压缩裁剪工具类
 * 
 * @Title ImageCompress.java
 * @Description
 * @author Succy
 * @date 2016年11月14日 下午6:38:08
 * @version 1.0
 * @Company www.succy.cn
 */
public class ImageCompress {

	private int width;// 图片的宽度
	private int height;// 图片的高度
	private Image img;// 图片对象

	public ImageCompress() {

	}

	/**
	 * 有参构造器，在构造该对象的时候，初始化图片与其宽高
	 * 
	 * @param in
	 *            输入流，用于构造图片对象
	 */
	public ImageCompress(InputStream in) {
		try {
			this.img = ImageIO.read(in);
		} catch (IOException e) {
			e.printStackTrace();
		}
		this.width = img.getWidth(null);
		this.height = img.getHeight(null);
	}

	/**
	 * 图片压缩方法
	 * 
	 * @param out
	 *            压缩后图片的输出流
	 * @param mul
	 *            图片缩小倍数
	 * @throws IOException
	 */
	public void compress(FileOutputStream out, double mul) throws IOException {
		//System.out.println("原始width: " + width+" 原始height: " +height);
		// 对宽高进行缩小
		width = (int) (this.width / mul);
		height = (int) (this.height / mul);
		//System.out.println("压缩后width: " + width+" 压缩后height: " +height);
		BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		bufImg.getGraphics().drawImage(img.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0,
				0, null);

		// 压缩
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
		encoder.encode(bufImg);

	}
}
